// 导出一个axios的实例  而且这个实例要有请求拦截器 响应拦截器
import axios from 'axios'
import { getToken,getTimeStamp } from './auth'
import router from '@/router';
import store from '@/store';
const timeOut = 3600;
const service = axios.create({
    baseURL:process.env.VUE_APP_BASE_API,
    timeout:5000,//5秒超时
}) // 创建一个axios的实例

// 请求拦截器

// 错误点，应该在请求拦截器里调用。在请求之前调用一直是之前一次的token。
// const token = getToken();
const token = getToken();
service.interceptors.request.use((config)=>{
    if(store.getters.token){
        // token超时
        // console.log("old",token);
        // console.log("111",store.getters.token);
        if(isCheckTimeOut()){
            store.dispatch("user/logout");
            router.push("/login");
            return Promise.reject(new Error('token超时了'))
        }
        config.headers['Authorization'] = `Bearer ${store.getters.token}`
    }
    return config;
},err=>{
    return Promise.reject(err);
})
 // 响应拦截器
service.interceptors.response.use((response)=>{
    const {success,message,data} = response.data;
    if(success){
        return data;
    }else{
        // this.$message.error(message);//提示错误信息
        
        return Promise.reject(new Error(message));
        
    }
},error=>{
     // error 信息 里面 response的对象
     
  if (error.response && error.response.data && error.response.data.code === 10002) {
    console.log(error.response);
    // 当等于10002的时候 表示 后端告诉我token超时了
    store.dispatch('user/logout') // 登出action 删除token
    router.push('/login')
  } else {
    Message.error(error.message) // 提示错误信息
  }
  return Promise.reject(error)
}) // 响应拦截器

function isCheckTimeOut(){
    let currentTime = Date.now();
    let timeStamp =  getTimeStamp();
    return (currentTime-timeStamp)/1000>timeOut
}
export default service // 导出axios实例